package co.yixiang.yshop.module.distributor.service.distributor;

import co.yixiang.yshop.framework.common.pojo.PageResult;
import co.yixiang.yshop.module.distributor.controller.admin.distributor.vo.*;
import co.yixiang.yshop.module.distributor.controller.app.distributor.vo.AppDistributorApplyReqVO;
import co.yixiang.yshop.module.distributor.controller.app.distributor.vo.AppDistributorDetailsRespVO;
import co.yixiang.yshop.module.distributor.controller.app.distributor.vo.AppDistributorUpdateReqVO;
import co.yixiang.yshop.module.distributor.controller.app.distributorproduct.vo.AppDistributorProductReqVO;
import co.yixiang.yshop.module.distributor.controller.app.distributorproduct.vo.AppDistributorProductRespVO;
import co.yixiang.yshop.module.distributor.dal.dataobject.distributor.DistributorDO;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;

import javax.validation.Valid;

@Service
@Validated
public interface DistributorFacade {

    /**
     * APP获取分销商详情
     *
     * @return 详情
     */
    AppDistributorDetailsRespVO getAppDetails();

    /**
     * APP提交分销商申请
     *
     * @param reqVO 传参
     */
    void apply(@Valid AppDistributorApplyReqVO reqVO);

    /**
     * APP更新分销商信息
     *
     * @param reqVO 传参
     */
    void appUpdate(@Valid AppDistributorUpdateReqVO reqVO);

    /**
     * 后台分销商详情
     *
     * @param id 分销商ID
     * @return 分销商
     */
    DistributorRespVO getDetails(Long id);

    /**
     * 后台分销商审核
     *
     * @param reqVO 传参
     */
    void verify(DistributorApplyReqVO reqVO);

    /**
     * 后台清退分销商
     *
     * @param reqVO 传参
     */
    void clearance(DistributorClearanceReqVO reqVO);


    /**
     * 后台恢复分销商
     *
     * @param reqVO 传参
     */
    void restore(DistributorClearanceReqVO reqVO);


    /**
     * 分页获取可分销商品
     *
     * @param reqVO 参数
     * @return 商品
     */
    PageResult<AppDistributorProductRespVO> getProductPage(AppDistributorProductReqVO reqVO);

    /**
     * 绑定用户
     *
     * @param id     分销商ID
     * @param userId 用户ID
     */
    Long bindUser(Long id, Long userId, Integer isDistributor);

    PageResult<DistributorDO> getPage(DistributorPageReqVO pageReqVO);

    /**
     * 修改分销商
     * @param updateReqVO /
     */
    void updateDistributor(DistributorUpdateReqVO updateReqVO);
}
